//字符串去html标签
export const ignoreHtml = function(str) {
	if (!str) {
		str = ""
	}
	var reg = new RegExp("<[^>]+>", "g");
	return (str+'').replace(reg, '');
}

export const errorToast = function(str) {
	uni.showToast({
		title: ignoreHtml(str),
		icon: "none",
		duration: 1500
	})
}

export const successToast = function(str) {
	uni.showToast({
		title: ignoreHtml(str),
		icon: "success",
		duration: 1500
	})
}
// 错误模态框
export const errorModal = function($vm, title, content, confirmFun) {
	uni.showModal({
		title: title,
		showCancel: false,
		content: ignoreHtml(content),
		success(res) {
			if (res.confirm) {
				if (confirmFun) {
					if (typeof confirmFun === "string") {
						if ($vm && $vm[confirmFun]) {
							$vm[confirmFun]();
						} else {
							eval(confirmFun + "()");
						}
					} else if (typeof confirmFun === "function") {
						confirmFun();
					}
				}
			}
		}
	})
}
// 确认模态框
export const confirmModal = function($vm, title, content, confirmFun, cancelFun,cancelText,confirmText) {
	uni.showModal({
		title: title,
		content: ignoreHtml(content),
		confirmText: confirmText || '确定', // 确认按钮文字  
		cancelText: cancelText || '取消', // 取消按钮的文字  
		success(res) {
			if (res.confirm) {
				if (confirmFun) {
					if (typeof confirmFun === "string") {
						if ($vm[confirmFun]) {
							$vm[confirmFun]();
						} else {
							eval(confirmFun + "()");
						}
					} else if (typeof confirmFun === "function") {
						confirmFun();
					}
				}
			} else if (res.cancel) {
				if (cancelFun) {
					if (typeof cancelFun === "string") {
						if ($vm[cancelFun]) {
							$vm[cancelFun]();
						} else {
							eval(cancelFun + "()");
						}
					} else if (typeof cancelFun === "function") {
						cancelFun();
					}
				}
			}
		}
	})
}

export const getCharLength = function(str) {
	var iLength = 0; //记录字符的字节数
	for (var i = 0; i < str.length; i++) { //遍历字符串中的每个字符
		if (str.charCodeAt(i) > 255) { //如果当前字符的编码大于255
			iLength += 2; //所占字节数加2
		} else {
			iLength += 1; //否则所占字节数加1
		}
	}
	return iLength; //返回字符所占字节数
}

/**
 * 获取浮点型数值
 * @param {Object} o 
 */
export const ptFloat = function(o) {
	if (!o) {
		return 0;
	} else {
		return parseFloat(o)
	}
}

/**
 * 减法运算
 * @param {Object} n1
 * @param {Object} n2
 */
export const minusF = function(num1, num2) {
	num1 = ptFloat(num1)
	num2 = ptFloat(num2)
	var baseNum, baseNum1, baseNum2;
	var precision; // 精度
	try {
		baseNum1 = new String(num1).split(".")[1].length;
	} catch (e) {
		baseNum1 = 0;
	}
	try {
		baseNum2 = new String(num2).split(".")[1].length;
	} catch (e) {
		baseNum2 = 0;
	}
	baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
	precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;
	return ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision);
}

/**
 * 加法运算
 * @param {Object} n1
 * @param {Object} n2
 */
export const addF = function(num1, num2) {
	num1 = ptFloat(num1)
	num2 = ptFloat(num2)
	var baseNum, baseNum1, baseNum2;
	var precision; // 精度
	try {
		baseNum1 = new String(num1).split(".")[1].length;
	} catch (e) {
		baseNum1 = 0;
	}
	try {
		baseNum2 = new String(num2).split(".")[1].length;
	} catch (e) {
		baseNum2 = 0;
	}
	baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
	precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;
	return ((num1 * baseNum + num2 * baseNum) / baseNum).toFixed(precision);
}

/**
 * 加法运算
 * @param {Object} n1
 * @param {Object} n2
 */
export const sumF = function(numArr) {
	var sum = 0
	if (numArr && numArr.length) {
		for (var i = 0; i < numArr.length; i++) {
			var n = numArr[i]
			sum = addF(sum, n)
		}
	}
	return sum;
}

/**
 * 乘法运算，避免数据相乘小数点后产生多位数和计算精度损失。
 *
 * @param num1被乘数 | num2乘数
 */
export const multiF = function(num1, num2) {
	num1 = ptFloat(num1);
	num2 = ptFloat(num2)
	var baseNum = 0;
	try {
		baseNum += num1.toString().split(".")[1].length;
	} catch (e) {}
	try {
		baseNum += num2.toString().split(".")[1].length;
	} catch (e) {}
	return Number(num1.toString().replace(".", "")) * Number(num2.toString().replace(".", "")) / Math.pow(10, baseNum);
};


/**
 * 转换为参数L
 * @param {Object} data
 */
var getParam = function(data) {
	var url = '';
	if (data) {
		for (var k in data) {
			var value = data[k] !== undefined ? data[k] : '';
			url += '&' + k + '=' + encodeURIComponent(value)
		}
	}
	return url ? url.substring(1) : '';
}

/**
 * 将url和参数拼接成完整地址
 * @param {string} url url地址
 * @param {Json} data json对象
 * @returns {string}
 */
export const getUrl = function(url, data) {
	//看原始url地址中开头是否带?，然后拼接处理好的参数
	return url += (url.indexOf('?') < 0 ? '?' : '&') + getParam(data)
}

/**
 * 获取yyyy-MM-dd hh:mm:ss
 * @param date 日期
 */
export const getDateTimeStr = function(date) {
	var Y = date.getFullYear() + '-';
	var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
	var D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';
	var h = date.getHours() + ':';
	var m = date.getMinutes() + ':';
	var s = date.getSeconds();
	return Y + M + D + h + m + s
}

/**
 * 获取yyyy-MM-dd
 * @param date 日期
 */
export const getTimeStr = function(date) {
	var h = date.getHours() + ':';
	var m = date.getMinutes() + ':';
	var s = date.getSeconds();
	return h + m + s
}

/**
 * 获取yyyy-MM-dd
 * @param date 日期
 */
export const getDateStr = function(date) {
	var Y = date.getFullYear() + '-';
	var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
	var D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate());
	return Y + M + D
}

/**
 * 判断为空
 * @param val
 * @returns {boolean}
 */
export const isEmpty = function(param) {
	return !isNotEmpty(param)
}

/**
 * 判断不为空
 * @param val
 * @returns {boolean}
 */
export const isNotEmpty = function(param) {
	return param || param === 0 ? true : false
}

/**
 * 拼接集合内对象指定属性
 * @param array 集合
 * @param key 属性名
 * @returns {boolean}
 */
export const joinObjStr = function(array, key) {
	var str = "";
	for (var i = 0; i < array.length; i++) {
		var obj = array[i]
		var value = obj[key]
		if (obj[key]) {
			if (str == "") {
				str = obj[key]
			} else {
				str = str + "," + obj[key]
			}
		}
	}
	return str
}
/**
 * 防止函数短时间内重复调用
 * @param func() 指定限制函数
 * @param wait 等待时间 (ms)
 * @returns function
 */
export const debounce = function(func,wait=500){
	let timer;
	let args = arguments;
	if(timer)clearTimeout(timer);
	timer = setTimeout(()=>{
		func.apply(this,args)
	},wait)
}
/**
 * 取出中括号内的值 []
 * @param text 
 * */
export const getBracketStr = function(text) {
    let result = ''
    if (isEmpty(text))
        return result
    let regex = /\[(.+?)\]/g;
    let options = text.match(regex)
    if (!isEmpty(options)) {
        let option = options[0]
        if (!isEmpty(option)) {
            result = option.substring(1, option.length - 1)
        }
    }
    return result
}
/**
 * 比较时间大小 
 * @param st 被比较时间
 * @param et 比较时间
 * @return boolean
 */
export const timeCompare = function(st,et){
	let sHour = ""
	let sMin = ""
	let eHour = ""
	let eMin = ""
	if(!Object.prototype.toString.call(st) == "[object String]"){
		return "st类型不正确"
	}else{
		if(st.indexOf(":") != -1 || st.length != 5){
			let stArr = st.split(":")
			sHour = stArr[0]
			sMin = stArr[1]
		}else{
			return "st格式不正确"
		}
	}
	if(!Object.prototype.toString.call(et) == "[object String]"){
		return "et类型不正确"
	}else{
		if(et.indexOf(":") != -1 || et.length != 5){
			let etArr = et.split(":")
			eHour = etArr[0]
			eMin = etArr[1]
		}else{
			return "et格式不正确"
		}
	}
	if(Number(sHour)>Number(eHour)){
		return true
	}else if(Number(sHour)==Number(eHour)){
		if(Number(sMin)>=Number(eMin)){
			return true
		}else{
			return false
		}
	}else{
		return false
	}
}
	
/**
 * 获取自动登录次数
 * @param text 
 * */
export const getAutoLoginTimes = function() {
	let num = uni.getStorageSync("auto-login-times");
	if(!num){
		return 0;
	}
    return parseInt(num);
}

/**
 * 自动增加登录次数
 * @param text 
 * */
export const addAutoLoginTimes = function() {
	let num = getAutoLoginTimes()
	uni.setStorageSync("auto-login-times",num + 1);
}

/**
 * 增加自动登录次数
 * @param text 
 * */
export const clearAutoLoginTimes = function() {
	uni.removeStorageSync("auto-login-times");
}

export const dealBigMoney = function(money) {       
    //汉字的数字
       var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
       //基本单位
       var cnIntRadice = new Array('', '拾', '佰', '仟');
       //对应整数部分扩展单位
       var cnIntUnits = new Array('', '万', '亿', '兆');
       //对应小数部分单位
       var cnDecUnits = new Array('角', '分', '毫', '厘');
       //整数金额时后面跟的字符
       var cnInteger = '整';
       //整型完以后的单位
       var cnIntLast = '元';
       //最大处理的数字
       var maxNum = 999999999999999.9999;
       //金额整数部分
       var integerNum;
       //金额小数部分
       var decimalNum;
       //输出的中文金额字符串
       var chineseStr = '';
       //分离金额后用的数组，预定义
       var parts;
       // 传入的参数为空情况 
       if(money == '') {
           return '';
       }
       money = parseFloat(money)
       if(money >= maxNum){
           return ''
       }
       // 传入的参数为0情况 
       if(money == 0) {
           chineseStr = cnNums[0] + cnIntLast + cnInteger;
           return chineseStr
       }
       // 转为字符串
       money = money.toString();
       // indexOf 检测某字符在字符串中首次出现的位置 返回索引值（从0 开始） -1 代表无
       if(money.indexOf('.') == -1){
           integerNum = money;
           decimalNum = ''
       }else{
           parts = money.split('.');
           integerNum = parts[0];
           decimalNum = parts[1].substr(0,4);
       }
       //转换整数部分
       if(parseInt(integerNum,10) > 0){
           let zeroCount  = 0;
           let IntLen = integerNum.length
           for(let i = 0; i < IntLen; i++){
               let n = integerNum.substr(i,1);
               let p = IntLen - i - 1;
               let q = p / 4;
               let m = p % 4;
               if( n == '0'){
                   zeroCount ++ ;
               }else{
                   if(zeroCount > 0){
                       chineseStr += cnNums[0]
                   }
                   zeroCount = 0;
                   chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
               }
               if(m == 0 && zeroCount < 4){
                   chineseStr += cnIntUnits[q]; 
               }
           }
           // 最后+ 元
           chineseStr += cnIntLast;
       }
       // 转换小数部分
       if(decimalNum != ''){
           let decLen = decimalNum.length;
           for(let i = 0; i <decLen; i++){
               let n = decimalNum.substr(i,1);
               if(n != '0'){
                   chineseStr += cnNums[Number(n)] + cnDecUnits[i]
               }
           }
       }
       if(chineseStr == ''){
           chineseStr += cnNums[0] + cnIntLast + cnInteger;
       }else if(decimalNum == ''){
           chineseStr += cnInteger;
       }
   
       return chineseStr
   }
  export const isEnglish = function(str) { 
		var pattern = /^[a-zA-Z]+$/;
		return pattern.test(str)
   }
   export const filterNumbers = function(str){
       return str.replace(/[0-9]/g, ''); // 将字符串中的数字替换为空字符串
   }
   
/**
 * 根据指定日期获取是星期几
 */
export const getDayOfWeek = function(dateStr) {
	var date = new Date(dateStr);
	var days = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
	var dayOfWeek = days[date.getDay()];
	return dayOfWeek;
}
